<?php


namespace app\test\controller;


use app\aliyun\controller\AliyunRtc;
use app\chat\LiveMessage;
use app\common\lib\apns\ApnsPush;
use app\common\model\UserPush;
use think\Cache;
use think\Controller;
use think\Env;
use \GatewayWorker\Lib\Gateway;
use app\common\lib\Util;
use think\Log;
use think\response\Json;
use XznsTools\push\Jpush;

/**
 * TestRtc 测试
 * Class TestRtc
 * @package app\test\controller
 */
class TestRtc extends Controller
{

    /**
     * 测试：调用RemoveTerminals将指定终端用户从频道踢出。
     * 请求地址：https://local-beta-wechat.goddessxzns.com/test/test_rtc/test?channel_id=11019251&user_id=12345883
     * @return Json
     */
    public function test(): Json
    {
        if (Env::get('host.name') !== 'online')
        {
            $channel_id = input('channel_id/d', 0);
            $user_id = input('user_id/d', 0);

            if ($channel_id === 0 || $user_id === 0)
            {
                return show(config('code.error'), "参数错误！");
            }

            $result = (new AliyunRtc())->removeTerminals($channel_id, [$user_id]);

            if ($result['code'] !== 200)
            {
                return show(config('code.error'), $result['msg']);
            }

            return show(config('code.success'), '请求成功！', $result);
        } else
        {
            return show(0, '失败！');
        }
    }


    /**
     * 测试：调用CreateEventSubscribe创建订阅房间消息的回调。
     * 请求地址：https://local-beta-wechat.goddessxzns.com/test/test_rtc/test1?channel_id=11019251
     * @return Json
     */
    public function test1(): Json
    {
        if (Env::get('host.name') !== 'online')
        {
            $channel_id = input('channel_id/d', 0);
            $is_remove = input('is_remove/d', 0);
            $sub_id = input('sub_id/s', '');

            if ($is_remove)
            {
                if ($sub_id)
                {
                    $result = (new AliyunRtc())->removeEventSubscribe('', $sub_id);
                } else
                {
                    $result = (new AliyunRtc())->removeEventSubscribe($channel_id);
                }
            } else
            {
                $result = (new AliyunRtc())->createEventSubscribe($channel_id);
            }

            if ($result['code'] !== 200)
            {
                return show(config('code.error'), $result['msg']);
            }

            return show(config('code.success'), '请求成功！', $result);
        } else
        {
            return show(0, '失败！');
        }
    }


    /**
     * rtc订阅id
     * @return Json
     */
    public function test2(): Json
    {
        if (Env::get('host.name') !== 'online')
        {
            //        回调鉴权说明
//事件回调鉴权功能默认关闭，用户可在创建事件回调时启用鉴权。启用鉴权后，鉴权逻辑如下所示：
//
//阿里云音视频通信服务发起回调请求时在HTTP(S)请求头中包含Ali-Rtc-Timestamp和 Ali-Rtc-Signature字段，供回调消息接收服务端进行签名认证。Ali-Rtc-Timestamp值计算方式为：Ali-Rtc-Signature=MD5SUM(MD5CONTENT)。其中，MD5CONTENT=回调域名|Ali-Rtc-Timestamp取值|鉴权Key；回调域名指配置回调URL的域名，鉴权Key指用户创建AppId时生成的AppKey。
//回调消息接收服务端接收回调消息时，将回调域名、Ali-Rtc-Timestamp取值、鉴权Key进行拼接后计算MD5值，得到加密字符串，再将计算出的加密字符串与音视频通信服务发起的HTTP(S)请求头中的Ali-Rtc-Signature字段值进行对比，如果不一致，则请求非法。


            $config=config('rtc');
            $CallbackUrl = $config['subscribe_doamin'];//注意：一定是回调域名
            $AppKey = $config['app_key'];
            $timstamp = '1639999467';

            $signature = md5($CallbackUrl . '|' . $timstamp . '|' . $AppKey);

            $filename = $signature;
//            $filename = '11019251';
            try
            {
//                $settingDir = RUNTIME_PATH . 'rtc';
//                !is_dir($settingDir) && mkdir($settingDir, 0755, true);
//                $filePath = $settingDir . DS . $filename;
//                file_put_contents($filePath, $signature);
//                $result = explode("  ", exec("md5sum $filePath"));
//                $signature = $result[0];
            }
            catch (Exception $e)
            {
                Log::write('createSettingFile:' . $e->getMessage(), 'error');
            }

            return show(config('code.success'), '请求成功！', [
                'header.sign' => 'cc9203d289ee82149b17c14504bae3df',
                'signature' => $signature
            ]);
        } else
        {
            return show(0, '失败！');
        }
    }
}
